package com.yidu.hbatsams.service.Impl;

import com.github.pagehelper.PageHelper;
import com.yidu.hbatsams.dao.ModuleMapper;
import com.yidu.hbatsams.dao.RoleModuleMapper;
import com.yidu.hbatsams.domain.Module;
import com.yidu.hbatsams.domain.vo.ModuleVo;
import com.yidu.hbatsams.service.ModuleService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

@Service
public class ModuleServiceImpl implements ModuleService {

     @Resource
     ModuleMapper moduleMapper;
     @Resource
     RoleModuleMapper roleModuleMapper;
     @Autowired
     RedisTemplate redisTemplate;

    @Override
    public List<ModuleVo> findAll(Integer pageNum, Integer pageSize, String moduleName) {

        PageHelper.startPage(pageNum,pageSize);

        List<Module> list = moduleMapper.findAll(moduleName);

        List<ModuleVo> listVo = new ArrayList<ModuleVo>();

        for (Iterator iterator = list.iterator(); iterator.hasNext();) {

            Module module = (Module) iterator.next();

            ModuleVo moduleVo = new ModuleVo();

            BeanUtils.copyProperties(module, moduleVo);

            Module m=moduleMapper.findById(module.getModModuleId());
            if(m!=null){
                moduleVo.setModmoduleName(m.getModuleName());
            }
            if(module.getModModuleId().equals("0")){
                moduleVo.setModmoduleName("该模块为一级模块");
            }
            if(module.getStandbyOne().equals("0")){
                moduleVo.setModuleName(module.getModuleName()+"(菜单)");
            }else{
                moduleVo.setModuleName(module.getModuleName()+"(按钮)");
            }
           listVo.add(moduleVo);

        }





        return listVo;
    }


    @Override
    public int count(String moduleName) {


        return moduleMapper.count(moduleName);
    }

    @Override
    public List<ModuleVo> findA() {

        List<Module> list = moduleMapper.findAll(null);

        List<ModuleVo> listVo = new ArrayList<ModuleVo>();

        for (Iterator iterator = list.iterator(); iterator.hasNext();) {

            Module module = (Module) iterator.next();

            ModuleVo moduleVo = new ModuleVo();

            BeanUtils.copyProperties(module, moduleVo);


            listVo.add(moduleVo);

        }

        return listVo;
    }

    @Override
    public void add(ModuleVo vo) {
        Module module = new Module();

        String uuid = UUID.randomUUID().toString().replaceAll("-","");

        vo.setModuleId(uuid);
        vo.setModuleValidity("有效");
        BeanUtils.copyProperties(vo, module);
        if(module.getModModuleId().equals("") || module.getModModuleId()==null) {
            module.setModModuleId("0");
        }
        Set<String> set = redisTemplate.keys("module_"+"*");
        redisTemplate.delete(set);
        moduleMapper.add(module);

    }
    @Override
    public void update(ModuleVo vo) {
        vo.setModuleValidity("有效");
        Module module =  moduleMapper.findById(vo.getModuleId());
        if(vo.getModModuleId()==null || "".equals(vo.getModModuleId())){
            vo.setModModuleId(module.getModModuleId());
        }
        BeanUtils.copyProperties(vo,module);

        moduleMapper.update(module);
    }

    @Override
    public ModuleVo findById(String moduleId) {
        Module po = moduleMapper.findById(moduleId);
        ModuleVo vo = new ModuleVo();
        BeanUtils.copyProperties(po, vo);
        if(!po.getModModuleId().equals("0")){
            Module module = moduleMapper.findById(po.getModModuleId());
            vo.setModmoduleName(module.getModuleName());
        }
        return vo;
    }

    @Override
    public List<ModuleVo> findAT() {

        List<Module> list = moduleMapper.findAll(null);
        List<ModuleVo> listVo = new ArrayList<ModuleVo>();
        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
            Module module = (Module) iterator.next();
            ModuleVo moduleVo = new ModuleVo();
            BeanUtils.copyProperties(module, moduleVo);
            listVo.add(moduleVo);
        }

        return listVo;
    }

    /**
     * 根据角色id查询信息
     * @param roleId 角色id
     * @return
     */
    @Override
    public List<Module> findRoleId(String roleId) {

        return moduleMapper.findRoleId(roleId);
    }

    /**
     * 删除数据
     * @param moduleId
     */
    @Override
    public void delete(String moduleId) {

        Module module = moduleMapper.findById(moduleId);

        module.setModuleValidity("无效");

        moduleMapper.update(module);

        roleModuleMapper.deleteModuleId(moduleId);

    }

}
